CC = gcc	#编译器
CFLAGS = -Wall -Wextra -pthread -Icommon #-Wall 和 -Wextra 用于开启所有警告，-pthread 用于链接pthread库，以便使用POSIX线程，-Icommon 用于指定头文件的搜索路径
#TARGET = file_transfer
SERVER = server/server #SERVER变量代表服务器可执行文件
CLIENT = client/client #CLIENT变量代表服务器可执行文件

# 源文件路径
SERVER_SRC = server/server.c thread_pool/thread_pool.c #服务器的源文件路径
CLIENT_SRC = client/client.c thread_pool/thread_pool.c #客户端的源文件路径

all: $(SERVER) $(CLIENT) #这个规则定义了默认目标 all，它依赖于 $(SERVER) 和 $(CLIENT) 两个目标。当运行 make 命令时，如果没有指定目标，将执行这个规则

#这个规则定义了如何编译服务器程序。它依赖于 $(SERVER_SRC) 源文件和 common/common.h 头文件。使用 $(CC) 和 $(CFLAGS) 变量指定编译器和编译标志，-o $@ 指定输出文件名（$@ 是目标文件的占位符），然后列出源文件
$(SERVER): $(SERVER_SRC) common/common.h
	$(CC) $(CFLAGS) -o $@ $(SERVER_SRC)

#如何编译客户端程序
$(CLIENT): $(CLIENT_SRC) common/common.h
	$(CC) $(CFLAGS) -o $@ $(CLIENT_SRC)

#清理编译过程中生成的文件。它删除了服务器和客户端的可执行文件，以及所有 .o 对象文件
clean:
	rm -f $(SERVER) $(CLIENT)
	rm -f server/*.o client/*.o thread_pool/*.o

.PHONY: all clean #all 和 clean 是伪目标，即它们不是实际的文件名，而是用来执行一系列命令的